library(knitr)
library(kableExtra)
library(dplyr)
library(tidyr)
seurobj <- readRDS('output/seurat_objects/180831/10x-180831')
batlas_results <- read.table('tables/tables_paper/supplementary_tables/BATLAS/BATLAS_branch_high_res.txt', sep='\t', header=T)
batlas_results['pseudotime_decile'] <- seurobj@meta.data$pseudotime_decile[match(batlas_results$sample, seurobj@meta.data$branch_high_res)]
batlas_results['branch'] <- seurobj@meta.data$branch[match(batlas_results$sample, seurobj@meta.data$branch_high_res)]
batlas_results <- batlas_results %>% mutate(block_branch = if_else(branch == 'Progenitor', 'Beginning', 'End'))
batlas_results['brown_centered'] <- batlas_results$brown - 0.5
batlas_results['ratio'] <- batlas_results$brown/batlas_results$white
kable(batlas_results) %>%
  kable_styling(bootstrap_options = "striped", full_width = F)
<table class="table table-striped" style="width: auto !important; margin-left: auto; margin-right: auto;">
 <thead>
  <tr>
   <th style="text-align:left;"> sample </th>
   <th style="text-align:right;"> brown </th>
   <th style="text-align:right;"> white </th>
   <th style="text-align:right;"> pseudotime_decile </th>
   <th style="text-align:left;"> branch </th>
   <th style="text-align:left;"> block_branch </th>
   <th style="text-align:right;"> brown_centered </th>
   <th style="text-align:right;"> ratio </th>
  </tr>
 </thead>
<tbody>
  <tr>
   <td style="text-align:left;"> ECM_1 </td>
   <td style="text-align:right;"> 0.411 </td>
   <td style="text-align:right;"> 0.589 </td>
   <td style="text-align:right;"> 1 </td>
   <td style="text-align:left;"> ECM </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> -0.089 </td>
   <td style="text-align:right;"> 0.6977929 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> ECM_2 </td>
   <td style="text-align:right;"> 0.391 </td>
   <td style="text-align:right;"> 0.609 </td>
   <td style="text-align:right;"> 2 </td>
   <td style="text-align:left;"> ECM </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> -0.109 </td>
   <td style="text-align:right;"> 0.6420361 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> ECM_3 </td>
   <td style="text-align:right;"> 0.399 </td>
   <td style="text-align:right;"> 0.601 </td>
   <td style="text-align:right;"> 3 </td>
   <td style="text-align:left;"> ECM </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> -0.101 </td>
   <td style="text-align:right;"> 0.6638935 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> ECM_4 </td>
   <td style="text-align:right;"> 0.410 </td>
   <td style="text-align:right;"> 0.590 </td>
   <td style="text-align:right;"> 4 </td>
   <td style="text-align:left;"> ECM </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> -0.090 </td>
   <td style="text-align:right;"> 0.6949153 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> ECM_5 </td>
   <td style="text-align:right;"> 0.396 </td>
   <td style="text-align:right;"> 0.604 </td>
   <td style="text-align:right;"> 5 </td>
   <td style="text-align:left;"> ECM </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> -0.104 </td>
   <td style="text-align:right;"> 0.6556291 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> ECM_6 </td>
   <td style="text-align:right;"> 0.395 </td>
   <td style="text-align:right;"> 0.605 </td>
   <td style="text-align:right;"> 6 </td>
   <td style="text-align:left;"> ECM </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> -0.105 </td>
   <td style="text-align:right;"> 0.6528926 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> ECM_7 </td>
   <td style="text-align:right;"> 0.393 </td>
   <td style="text-align:right;"> 0.607 </td>
   <td style="text-align:right;"> 7 </td>
   <td style="text-align:left;"> ECM </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> -0.107 </td>
   <td style="text-align:right;"> 0.6474465 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> ECM_8 </td>
   <td style="text-align:right;"> 0.381 </td>
   <td style="text-align:right;"> 0.619 </td>
   <td style="text-align:right;"> 8 </td>
   <td style="text-align:left;"> ECM </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> -0.119 </td>
   <td style="text-align:right;"> 0.6155089 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> ECM_9 </td>
   <td style="text-align:right;"> 0.379 </td>
   <td style="text-align:right;"> 0.621 </td>
   <td style="text-align:right;"> 9 </td>
   <td style="text-align:left;"> ECM </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> -0.121 </td>
   <td style="text-align:right;"> 0.6103060 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> ECM_10 </td>
   <td style="text-align:right;"> 0.357 </td>
   <td style="text-align:right;"> 0.643 </td>
   <td style="text-align:right;"> 10 </td>
   <td style="text-align:left;"> ECM </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> -0.143 </td>
   <td style="text-align:right;"> 0.5552100 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Metabolic_1 </td>
   <td style="text-align:right;"> 0.469 </td>
   <td style="text-align:right;"> 0.531 </td>
   <td style="text-align:right;"> 1 </td>
   <td style="text-align:left;"> Metabolic </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> -0.031 </td>
   <td style="text-align:right;"> 0.8832392 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Metabolic_2 </td>
   <td style="text-align:right;"> 0.476 </td>
   <td style="text-align:right;"> 0.524 </td>
   <td style="text-align:right;"> 2 </td>
   <td style="text-align:left;"> Metabolic </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> -0.024 </td>
   <td style="text-align:right;"> 0.9083969 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Metabolic_3 </td>
   <td style="text-align:right;"> 0.505 </td>
   <td style="text-align:right;"> 0.495 </td>
   <td style="text-align:right;"> 3 </td>
   <td style="text-align:left;"> Metabolic </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> 0.005 </td>
   <td style="text-align:right;"> 1.0202020 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Metabolic_4 </td>
   <td style="text-align:right;"> 0.520 </td>
   <td style="text-align:right;"> 0.480 </td>
   <td style="text-align:right;"> 4 </td>
   <td style="text-align:left;"> Metabolic </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> 0.020 </td>
   <td style="text-align:right;"> 1.0833333 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Metabolic_5 </td>
   <td style="text-align:right;"> 0.549 </td>
   <td style="text-align:right;"> 0.451 </td>
   <td style="text-align:right;"> 5 </td>
   <td style="text-align:left;"> Metabolic </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> 0.049 </td>
   <td style="text-align:right;"> 1.2172949 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Metabolic_6 </td>
   <td style="text-align:right;"> 0.578 </td>
   <td style="text-align:right;"> 0.422 </td>
   <td style="text-align:right;"> 6 </td>
   <td style="text-align:left;"> Metabolic </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> 0.078 </td>
   <td style="text-align:right;"> 1.3696682 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Metabolic_7 </td>
   <td style="text-align:right;"> 0.622 </td>
   <td style="text-align:right;"> 0.378 </td>
   <td style="text-align:right;"> 7 </td>
   <td style="text-align:left;"> Metabolic </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> 0.122 </td>
   <td style="text-align:right;"> 1.6455026 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Metabolic_8 </td>
   <td style="text-align:right;"> 0.671 </td>
   <td style="text-align:right;"> 0.329 </td>
   <td style="text-align:right;"> 8 </td>
   <td style="text-align:left;"> Metabolic </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> 0.171 </td>
   <td style="text-align:right;"> 2.0395137 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Metabolic_9 </td>
   <td style="text-align:right;"> 0.752 </td>
   <td style="text-align:right;"> 0.248 </td>
   <td style="text-align:right;"> 9 </td>
   <td style="text-align:left;"> Metabolic </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> 0.252 </td>
   <td style="text-align:right;"> 3.0322581 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Metabolic_10 </td>
   <td style="text-align:right;"> 0.796 </td>
   <td style="text-align:right;"> 0.204 </td>
   <td style="text-align:right;"> 10 </td>
   <td style="text-align:left;"> Metabolic </td>
   <td style="text-align:left;"> End </td>
   <td style="text-align:right;"> 0.296 </td>
   <td style="text-align:right;"> 3.9019608 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Progenitor_1 </td>
   <td style="text-align:right;"> 0.457 </td>
   <td style="text-align:right;"> 0.543 </td>
   <td style="text-align:right;"> 1 </td>
   <td style="text-align:left;"> Progenitor </td>
   <td style="text-align:left;"> Beginning </td>
   <td style="text-align:right;"> -0.043 </td>
   <td style="text-align:right;"> 0.8416206 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Progenitor_2 </td>
   <td style="text-align:right;"> 0.371 </td>
   <td style="text-align:right;"> 0.629 </td>
   <td style="text-align:right;"> 2 </td>
   <td style="text-align:left;"> Progenitor </td>
   <td style="text-align:left;"> Beginning </td>
   <td style="text-align:right;"> -0.129 </td>
   <td style="text-align:right;"> 0.5898251 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Progenitor_3 </td>
   <td style="text-align:right;"> 0.341 </td>
   <td style="text-align:right;"> 0.659 </td>
   <td style="text-align:right;"> 3 </td>
   <td style="text-align:left;"> Progenitor </td>
   <td style="text-align:left;"> Beginning </td>
   <td style="text-align:right;"> -0.159 </td>
   <td style="text-align:right;"> 0.5174507 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Progenitor_4 </td>
   <td style="text-align:right;"> 0.320 </td>
   <td style="text-align:right;"> 0.680 </td>
   <td style="text-align:right;"> 4 </td>
   <td style="text-align:left;"> Progenitor </td>
   <td style="text-align:left;"> Beginning </td>
   <td style="text-align:right;"> -0.180 </td>
   <td style="text-align:right;"> 0.4705882 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Progenitor_5 </td>
   <td style="text-align:right;"> 0.302 </td>
   <td style="text-align:right;"> 0.698 </td>
   <td style="text-align:right;"> 5 </td>
   <td style="text-align:left;"> Progenitor </td>
   <td style="text-align:left;"> Beginning </td>
   <td style="text-align:right;"> -0.198 </td>
   <td style="text-align:right;"> 0.4326648 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Progenitor_6 </td>
   <td style="text-align:right;"> 0.295 </td>
   <td style="text-align:right;"> 0.705 </td>
   <td style="text-align:right;"> 6 </td>
   <td style="text-align:left;"> Progenitor </td>
   <td style="text-align:left;"> Beginning </td>
   <td style="text-align:right;"> -0.205 </td>
   <td style="text-align:right;"> 0.4184397 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Progenitor_7 </td>
   <td style="text-align:right;"> 0.283 </td>
   <td style="text-align:right;"> 0.717 </td>
   <td style="text-align:right;"> 7 </td>
   <td style="text-align:left;"> Progenitor </td>
   <td style="text-align:left;"> Beginning </td>
   <td style="text-align:right;"> -0.217 </td>
   <td style="text-align:right;"> 0.3947001 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Progenitor_8 </td>
   <td style="text-align:right;"> 0.262 </td>
   <td style="text-align:right;"> 0.738 </td>
   <td style="text-align:right;"> 8 </td>
   <td style="text-align:left;"> Progenitor </td>
   <td style="text-align:left;"> Beginning </td>
   <td style="text-align:right;"> -0.238 </td>
   <td style="text-align:right;"> 0.3550136 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Progenitor_9 </td>
   <td style="text-align:right;"> 0.247 </td>
   <td style="text-align:right;"> 0.753 </td>
   <td style="text-align:right;"> 9 </td>
   <td style="text-align:left;"> Progenitor </td>
   <td style="text-align:left;"> Beginning </td>
   <td style="text-align:right;"> -0.253 </td>
   <td style="text-align:right;"> 0.3280212 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> Progenitor_10 </td>
   <td style="text-align:right;"> 0.306 </td>
   <td style="text-align:right;"> 0.694 </td>
   <td style="text-align:right;"> 10 </td>
   <td style="text-align:left;"> Progenitor </td>
   <td style="text-align:left;"> Beginning </td>
   <td style="text-align:right;"> -0.194 </td>
   <td style="text-align:right;"> 0.4409222 </td>
  </tr>
</tbody>
</table>

Option 1a. Y = brown_pct-0.5 . y-axis center to x=50%.

p <- ggplot(batlas_results, aes(x=as.factor(pseudotime_decile), y=brown_centered, fill=branch)) +
  geom_col(position = position_dodge2(width=0.9, preserve='single')) +
  labs(x="Pseudotime", fill="Branch", y=NULL) +
  scale_fill_manual(values=colormap.branches) +
  facet_grid(cols=vars(block_branch), switch='x') + 
  scale_y_continuous(limits=c(-0.5, 0.5), breaks=seq(-0.5, 0.5, by=0.5), labels=c('100% white', '50/50', '100% brown')) +
  theme(strip.background=element_blank(), axis.text.x=element_blank(), strip.placement='outside')
save_plot('../figures/figures_paper/supplementary_figures/batlas/BATLAS_results.pdf', p, base_height=6, base_width=8)
p

Option 2. Brown-to-white ratio = %brown/%white.

Option 2 log scaled.

Option 1b. Clusters.

Without y-axis

p <- ggplot(batlas_results_clusters, aes(x=as.factor(cluster), y=brown_centered, fill=color)) +
  geom_col(position = position_dodge2(width=0.9, preserve='single')) +
  geom_text(aes(x=as.factor(cluster), y=ifelse(brown > 0.5, -0.02, 0.02), label=cluster)) +
  labs(x=NULL, fill="Branch", y=NULL) +
  scale_fill_manual(values=c(brown='#6c4431', white='#d1a567')) +
  scale_y_continuous(limits=c(-0.5, 0.5), breaks=seq(-0.5, 0.5, by=0.5), labels=c('100% white', '50/50', '100% brown')) + 
  #facet_grid(rows=vars(block_branch), switch='x') + 
  #scale_y_continuous(limits=c(-0.5, 0.5), breaks=seq(-0.5, 0.5, by=0.5), labels=c('100% white', '50/50', '100% brown')) +
  theme(axis.text.y=element_blank(), axis.ticks.y=element_blank(), panel.border=element_blank(), axis.line.y=element_blank(), legend.position = 'none') +
 coord_flip()
#save_plot('../figures/figures_paper/supplementary_figures/batlas/BATLAS_results_clusters-res.1.5.pdf', p, base_height=5, base_width=8)
p

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkoa25pdHIpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWR5cikKYGBgCgoKYGBge3J9CnNldXJvYmogPC0gcmVhZFJEUygnb3V0cHV0L3NldXJhdF9vYmplY3RzLzE4MDgzMS8xMHgtMTgwODMxJykKYmF0bGFzX3Jlc3VsdHMgPC0gcmVhZC50YWJsZSgndGFibGVzL3RhYmxlc19wYXBlci9zdXBwbGVtZW50YXJ5X3RhYmxlcy9CQVRMQVMvQkFUTEFTX2JyYW5jaF9oaWdoX3Jlcy50eHQnLCBzZXA9J1x0JywgaGVhZGVyPVQpCmBgYAoKCmBgYHtyfQpiYXRsYXNfcmVzdWx0c1sncHNldWRvdGltZV9kZWNpbGUnXSA8LSBzZXVyb2JqQG1ldGEuZGF0YSRwc2V1ZG90aW1lX2RlY2lsZVttYXRjaChiYXRsYXNfcmVzdWx0cyRzYW1wbGUsIHNldXJvYmpAbWV0YS5kYXRhJGJyYW5jaF9oaWdoX3JlcyldCmJhdGxhc19yZXN1bHRzWydicmFuY2gnXSA8LSBzZXVyb2JqQG1ldGEuZGF0YSRicmFuY2hbbWF0Y2goYmF0bGFzX3Jlc3VsdHMkc2FtcGxlLCBzZXVyb2JqQG1ldGEuZGF0YSRicmFuY2hfaGlnaF9yZXMpXQpiYXRsYXNfcmVzdWx0cyA8LSBiYXRsYXNfcmVzdWx0cyAlPiUgbXV0YXRlKGJsb2NrX2JyYW5jaCA9IGlmX2Vsc2UoYnJhbmNoID09ICdQcm9nZW5pdG9yJywgJ0JlZ2lubmluZycsICdFbmQnKSkKYmF0bGFzX3Jlc3VsdHNbJ2Jyb3duX2NlbnRlcmVkJ10gPC0gYmF0bGFzX3Jlc3VsdHMkYnJvd24gLSAwLjUKYmF0bGFzX3Jlc3VsdHNbJ3JhdGlvJ10gPC0gYmF0bGFzX3Jlc3VsdHMkYnJvd24vYmF0bGFzX3Jlc3VsdHMkd2hpdGUKCmthYmxlKGJhdGxhc19yZXN1bHRzKSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCBmdWxsX3dpZHRoID0gRikKYGBgCgpPcHRpb24gMWEuIFkgPSBicm93bl9wY3QtMC41IC4geS1heGlzIGNlbnRlciB0byB4PTUwJS4KCmBgYHtyLCBmaWcuaGVpZ2h0ID0gNiwgZmlnLndpZHRoID0gOCwgZmlnLmFsaWduID0gImNlbnRlciJ9CnAgPC0gZ2dwbG90KGJhdGxhc19yZXN1bHRzLCBhZXMoeD1hcy5mYWN0b3IocHNldWRvdGltZV9kZWNpbGUpLCB5PWJyb3duX2NlbnRlcmVkLCBmaWxsPWJyYW5jaCkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMih3aWR0aD0wLjksIHByZXNlcnZlPSdzaW5nbGUnKSkgKwogIGxhYnMoeD0iUHNldWRvdGltZSIsIGZpbGw9IkJyYW5jaCIsIHk9TlVMTCkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jb2xvcm1hcC5icmFuY2hlcykgKwogIGZhY2V0X2dyaWQoY29scz12YXJzKGJsb2NrX2JyYW5jaCksIHN3aXRjaD0neCcpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cz1jKC0wLjUsIDAuNSksIGJyZWFrcz1zZXEoLTAuNSwgMC41LCBieT0wLjUpLCBsYWJlbHM9YygnMTAwJSB3aGl0ZScsICc1MC81MCcsICcxMDAlIGJyb3duJykpICsKICB0aGVtZShzdHJpcC5iYWNrZ3JvdW5kPWVsZW1lbnRfYmxhbmsoKSwgYXhpcy50ZXh0Lng9ZWxlbWVudF9ibGFuaygpLCBzdHJpcC5wbGFjZW1lbnQ9J291dHNpZGUnKQoKc2F2ZV9wbG90KCcuLi9maWd1cmVzL2ZpZ3VyZXNfcGFwZXIvbWFpbl9maWd1cmVzL2ZpZ3VyZTMvL0JBVExBU19yZXN1bHRzLnBkZicsIHAsIGJhc2VfaGVpZ2h0PTUsIGJhc2Vfd2lkdGg9OCkKcApgYGAKCk9wdGlvbiAyLiBCcm93bi10by13aGl0ZSByYXRpbyA9ICVicm93bi8ld2hpdGUuCgpgYGB7ciwgZmlnLmhlaWdodCA9IDUsIGZpZy53aWR0aCA9IDgsIGZpZy5hbGlnbiA9ICJjZW50ZXIifQpwIDwtIGdncGxvdChiYXRsYXNfcmVzdWx0cywgYWVzKHg9YXMuZmFjdG9yKHBzZXVkb3RpbWVfZGVjaWxlKSwgeT1yYXRpby0xLCBmaWxsPWJyYW5jaCkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMih3aWR0aD0wLjksIHByZXNlcnZlPSdzaW5nbGUnKSkgKwogIGxhYnMoeD0iUHNldWRvdGltZSIsIHk9J1JhdGlvIGJyb3duL3doaXRlJywgZmlsbD0iQnJhbmNoIikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jb2xvcm1hcC5icmFuY2hlcykgKwogIGZhY2V0X2dyaWQoY29scz12YXJzKGJsb2NrX2JyYW5jaCksIHN3aXRjaD0neCcpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGZ1bmN0aW9uKGJyZWFrcykgeyBicmVha3MgKyAxfSkgKwogIHRoZW1lKHN0cmlwLmJhY2tncm91bmQ9ZWxlbWVudF9ibGFuaygpLCBzdHJpcC50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9cmVsKDAuMikpLCBheGlzLnRleHQueD1lbGVtZW50X2JsYW5rKCksIHN0cmlwLnBsYWNlbWVudD0nb3V0c2lkZScpCgpzYXZlX3Bsb3QoJy4uL2ZpZ3VyZXMvZmlndXJlc19wYXBlci9zdXBwbGVtZW50YXJ5X2ZpZ3VyZXMvYmF0bGFzL0JBVExBU19yZXN1bHRzX3JhdGlvcy5wZGYnLCBwLCBiYXNlX2hlaWdodD01LCBiYXNlX3dpZHRoPTgpCgpwCmBgYAoKT3B0aW9uIDIgbG9nIHNjYWxlZC4KCmBgYHtyLCBmaWcuaGVpZ2h0ID0gNSwgZmlnLndpZHRoID0gOCwgZmlnLmFsaWduID0gImNlbnRlciJ9CnAgPC0gZ2dwbG90KGJhdGxhc19yZXN1bHRzLCBhZXMoeD1hcy5mYWN0b3IocHNldWRvdGltZV9kZWNpbGUpLCB5PWxvZzIocmF0aW8pLCBmaWxsPWJyYW5jaCkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMih3aWR0aD0wLjksIHByZXNlcnZlPSdzaW5nbGUnKSkgKwogIGxhYnMoeD0iUHNldWRvdGltZSIsIHk9J2xvZzIgYnJvd24vd2hpdGUnLCBmaWxsPSJCcmFuY2giKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWNvbG9ybWFwLmJyYW5jaGVzKSArCiAgZmFjZXRfZ3JpZCguIH4gYmxvY2tfYnJhbmNoLCBzd2l0Y2g9J3gnKSArIAogIHRoZW1lKHN0cmlwLmJhY2tncm91bmQ9ZWxlbWVudF9ibGFuaygpLCBzdHJpcC50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9cmVsKDAuMikpLCBheGlzLnRleHQueD1lbGVtZW50X2JsYW5rKCksIHN0cmlwLnBsYWNlbWVudD0nb3V0c2lkZScsIHN0cmlwLnRleHQ9ZWxlbWVudF90ZXh0KGhqdXN0PWMoMC41KSkpCgpzYXZlX3Bsb3QoJy4uL2ZpZ3VyZXMvZmlndXJlc19wYXBlci9zdXBwbGVtZW50YXJ5X2ZpZ3VyZXMvYmF0bGFzL0JBVExBU19yZXN1bHRzX3JhdGlvc19sb2dzY2FsZWQucGRmJywgcCwgYmFzZV9oZWlnaHQ9NSwgYmFzZV93aWR0aD04KQoKcApgYGAKCk9wdGlvbiAxYi4gQ2x1c3RlcnMuIAoKYGBge3J9CmJhdGxhc19yZXN1bHRzX2NsdXN0ZXJzIDwtIHJlYWQudGFibGUoJ3RhYmxlcy90YWJsZXNfcGFwZXIvc3VwcGxlbWVudGFyeV90YWJsZXMvQkFUTEFTL0JBVExBUy50eHQnLCBzZXA9J1x0JywgaGVhZGVyPVQpCmJhdGxhc19yZXN1bHRzX2NsdXN0ZXJzWydicm93bl9jZW50ZXJlZCddIDwtIGJhdGxhc19yZXN1bHRzX2NsdXN0ZXJzJGJyb3duIC0gMC41CmJhdGxhc19yZXN1bHRzX2NsdXN0ZXJzWydjb2xvciddIDwtIHVubGlzdChsYXBwbHkoYmF0bGFzX3Jlc3VsdHNfY2x1c3RlcnMkYnJvd24sIGZ1bmN0aW9uKHgpewogIGlmICh4ID4gMC41KXsKICAgIHJldHVybignYnJvd24nKQogIH0gZWxzZSB7CiAgICByZXR1cm4oJ3doaXRlJykKICB9Cn0pKQoKcCA8LSBnZ3Bsb3QoYmF0bGFzX3Jlc3VsdHNfY2x1c3RlcnMsIGFlcyh4PWFzLmZhY3RvcihjbHVzdGVyKSwgeT1icm93bl9jZW50ZXJlZCwgZmlsbD1jb2xvcikpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMih3aWR0aD0wLjksIHByZXNlcnZlPSdzaW5nbGUnKSkgKwogIGxhYnMoeD0iQ2x1c3RlciIsIGZpbGw9IkJyYW5jaCIsIHk9TlVMTCkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKGJyb3duPScjNmM0NDMxJywgd2hpdGU9JyNkMWE1NjcnKSkgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHM9YygtMC41LCAwLjUpLCBicmVha3M9c2VxKC0wLjUsIDAuNSwgYnk9MC41KSwgbGFiZWxzPWMoJzEwMCUgd2hpdGUnLCAnNTAvNTAnLCAnMTAwJSBicm93bicpKSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdub25lJykgKwogY29vcmRfZmxpcCgpCgpzYXZlX3Bsb3QoJy4uL2ZpZ3VyZXMvZmlndXJlc19wYXBlci9zdXBwbGVtZW50YXJ5X2ZpZ3VyZXMvYmF0bGFzL0JBVExBU19yZXN1bHRzX2NsdXN0ZXJzLXJlcy4xLjUucGRmJywgcCwgYmFzZV9oZWlnaHQ9NSwgYmFzZV93aWR0aD04KQoKcApgYGAKCldpdGhvdXQgeS1heGlzCgpgYGB7cn0KcCA8LSBnZ3Bsb3QoYmF0bGFzX3Jlc3VsdHNfY2x1c3RlcnMsIGFlcyh4PWFzLmZhY3RvcihjbHVzdGVyKSwgeT1icm93bl9jZW50ZXJlZCwgZmlsbD1jb2xvcikpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMih3aWR0aD0wLjksIHByZXNlcnZlPSdzaW5nbGUnKSkgKwogIGdlb21fdGV4dChhZXMoeD1hcy5mYWN0b3IoY2x1c3RlciksIHk9aWZlbHNlKGJyb3duID4gMC41LCAtMC4wMiwgMC4wMiksIGxhYmVsPWNsdXN0ZXIpKSArCiAgbGFicyh4PU5VTEwsIGZpbGw9IkJyYW5jaCIsIHk9TlVMTCkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKGJyb3duPScjNmM0NDMxJywgd2hpdGU9JyNkMWE1NjcnKSkgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHM9YygtMC41LCAwLjUpLCBicmVha3M9c2VxKC0wLjUsIDAuNSwgYnk9MC41KSwgbGFiZWxzPWMoJzEwMCUgd2hpdGUnLCAnNTAvNTAnLCAnMTAwJSBicm93bicpKSArIAogICNmYWNldF9ncmlkKHJvd3M9dmFycyhibG9ja19icmFuY2gpLCBzd2l0Y2g9J3gnKSArIAogICNzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzPWMoLTAuNSwgMC41KSwgYnJlYWtzPXNlcSgtMC41LCAwLjUsIGJ5PTAuNSksIGxhYmVscz1jKCcxMDAlIHdoaXRlJywgJzUwLzUwJywgJzEwMCUgYnJvd24nKSkgKwogIHRoZW1lKGF4aXMudGV4dC55PWVsZW1lbnRfYmxhbmsoKSwgYXhpcy50aWNrcy55PWVsZW1lbnRfYmxhbmsoKSwgcGFuZWwuYm9yZGVyPWVsZW1lbnRfYmxhbmsoKSwgYXhpcy5saW5lLnk9ZWxlbWVudF9ibGFuaygpLCBsZWdlbmQucG9zaXRpb24gPSAnbm9uZScpICsKIGNvb3JkX2ZsaXAoKQoKc2F2ZV9wbG90KCcuLi9maWd1cmVzL2ZpZ3VyZXNfcGFwZXIvc3VwcGxlbWVudGFyeV9maWd1cmVzL2JhdGxhcy9CQVRMQVNfcmVzdWx0c19jbHVzdGVycy1yZXMuMS41X25vLXktYXhpcy5wZGYnLCBwLCBiYXNlX2hlaWdodD01LCBiYXNlX3dpZHRoPTgpCgpwCmBgYAoK